using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using database;
using objetos;
using System.IO;
using System.Xml.Serialization;

namespace dados
{
	#region TB_NF
	/// <summary>
	/// This object represents the properties and methods of a TB_NF.
	/// </summary>
	public class DAL_TB_NF
	{		
	
		/// <summary>
		/// Incluir via aplicacao
		/// </summary>	
		public int Incluir(OBJ_TB_NF obj)
		{
			try
			{
				DAO_DATABASE db = new DAO_DATABASE();
				DataSet ds = new DataSet();
				List<string> lista = new List<string>();		
	
				db.CreateParameter("@chave", SqlDbType.VarChar, obj.chave);				
				lista.Add("@chave");				
				db.CreateParameter("@protocolo", SqlDbType.VarChar, obj.protocolo);				
				lista.Add("@protocolo");
                db.CreateParameter("@dt_protocolo", SqlDbType.VarChar, obj.dt_protocolo);
                lista.Add("@dt_protocolo");
                db.CreateParameter("@num_recibo", SqlDbType.VarChar, obj.num_recibo);
                lista.Add("@num_recibo");
                db.CreateParameter("@dt_recibo", SqlDbType.VarChar, obj.dt_recibo);
                lista.Add("@dt_recibo");				
				db.CreateParameter("@id_operacao", SqlDbType.Int, obj.id_operacao);				
				lista.Add("@id_operacao");				
				db.CreateParameter("@id_versao", SqlDbType.Int, obj.id_versao);				
				lista.Add("@id_versao");				
				db.CreateParameter("@id_empresa", SqlDbType.Int, obj.id_empresa);				
				lista.Add("@id_empresa");				
				db.CreateParameter("@id_ordem_servico", SqlDbType.Int, obj.id_ordem_servico);				
				lista.Add("@id_ordem_servico");				
				db.CreateParameter("@id_pedido", SqlDbType.Int, obj.id_pedido);				
				lista.Add("@id_pedido");				
				db.CreateParameter("@id_cadastro", SqlDbType.Int, obj.id_cadastro);				
				lista.Add("@id_cadastro");				
				db.CreateParameter("@id_tipo_frete", SqlDbType.Int, obj.id_tipo_frete);				
				lista.Add("@id_tipo_frete");				
				db.CreateParameter("@id_forma_pagamento", SqlDbType.Int, obj.id_forma_pagamento);				
				lista.Add("@id_forma_pagamento");				
				db.CreateParameter("@id_condicao_pagamento", SqlDbType.Int, obj.id_condicao_pagamento);				
				lista.Add("@id_condicao_pagamento");				
				db.CreateParameter("@id_endereco_retirada", SqlDbType.Int, obj.id_endereco_retirada);				
				lista.Add("@id_endereco_retirada");				
				db.CreateParameter("@id_endereco_entrega", SqlDbType.Int, obj.id_endereco_entrega);				
				lista.Add("@id_endereco_entrega");				
				db.CreateParameter("@id_usuario_vendedor", SqlDbType.Int, obj.id_usuario_vendedor);				
				lista.Add("@id_usuario_vendedor");				
				db.CreateParameter("@id_usuario_criador", SqlDbType.Int, obj.id_usuario_criador);				
				lista.Add("@id_usuario_criador");				
				db.CreateParameter("@id_status", SqlDbType.Int, obj.id_status);				
				lista.Add("@id_status");				
				db.CreateParameter("@id_mod_doc_fiscal", SqlDbType.Char, obj.id_mod_doc_fiscal);				
				lista.Add("@id_mod_doc_fiscal");				
				db.CreateParameter("@num_nota_fiscal", SqlDbType.Int, obj.num_nota_fiscal);				
				lista.Add("@num_nota_fiscal");				
				db.CreateParameter("@serie", SqlDbType.Int, obj.serie);				
				lista.Add("@serie");				
				db.CreateParameter("@dt_emissao", SqlDbType.DateTime, obj.dt_emissao);				
				lista.Add("@dt_emissao");				
				db.CreateParameter("@dt_entrada_saida", SqlDbType.DateTime, obj.dt_entrada_saida);				
				lista.Add("@dt_entrada_saida");				
				db.CreateParameter("@id_forma_impressao", SqlDbType.Int, obj.id_forma_impressao);				
				lista.Add("@id_forma_impressao");				
				db.CreateParameter("@id_tipo_emissao", SqlDbType.Int, obj.id_tipo_emissao);				
				lista.Add("@id_tipo_emissao");				
				db.CreateParameter("@digito_verificador", SqlDbType.Int, obj.digito_verificador);				
				lista.Add("@digito_verificador");				
				db.CreateParameter("@id_ambiente", SqlDbType.Int, obj.id_ambiente);				
				lista.Add("@id_ambiente");				
				db.CreateParameter("@id_finalidade", SqlDbType.Int, obj.id_finalidade);				
				lista.Add("@id_finalidade");				
				db.CreateParameter("@id_processo_emissao", SqlDbType.Int, obj.id_processo_emissao);				
				lista.Add("@id_processo_emissao");				
				db.CreateParameter("@versao_aplicativo", SqlDbType.VarChar, obj.versao_aplicativo);				
				lista.Add("@versao_aplicativo");				
				db.CreateParameter("@cfop", SqlDbType.Int, obj.cfop);				
				lista.Add("@cfop");				
				db.CreateParameter("@dt_contingencia", SqlDbType.DateTime, obj.dt_contingencia);				
				lista.Add("@dt_contingencia");				
				db.CreateParameter("@desc_justificativa", SqlDbType.VarChar, obj.desc_justificativa);				
				lista.Add("@desc_justificativa");				
				db.CreateParameter("@valor_total_bc_icms", SqlDbType.Decimal, obj.valor_total_bc_icms);				
				lista.Add("@valor_total_bc_icms");				
				db.CreateParameter("@valor_total_icms", SqlDbType.Decimal, obj.valor_total_icms);				
				lista.Add("@valor_total_icms");				
				db.CreateParameter("@valor_total_bc_icms_st", SqlDbType.Decimal, obj.valor_total_bc_icms_st);				
				lista.Add("@valor_total_bc_icms_st");				
				db.CreateParameter("@valor_total_icms_st", SqlDbType.Decimal, obj.valor_total_icms_st);				
				lista.Add("@valor_total_icms_st");				
				db.CreateParameter("@valor_total_produto", SqlDbType.Decimal, obj.valor_total_produto);				
				lista.Add("@valor_total_produto");				
				db.CreateParameter("@valor_total_frete", SqlDbType.Decimal, obj.valor_total_frete);				
				lista.Add("@valor_total_frete");				
				db.CreateParameter("@valor_total_seguro", SqlDbType.Decimal, obj.valor_total_seguro);				
				lista.Add("@valor_total_seguro");				
				db.CreateParameter("@valor_total_desconto", SqlDbType.Decimal, obj.valor_total_desconto);				
				lista.Add("@valor_total_desconto");				
				db.CreateParameter("@valor_total_outro", SqlDbType.Decimal, obj.valor_total_outro);				
				lista.Add("@valor_total_outro");				
				db.CreateParameter("@valor_total_ii", SqlDbType.Decimal, obj.valor_total_ii);				
				lista.Add("@valor_total_ii");				
				db.CreateParameter("@valor_total_ipi", SqlDbType.Decimal, obj.valor_total_ipi);				
				lista.Add("@valor_total_ipi");				
				db.CreateParameter("@valor_total_pis", SqlDbType.Decimal, obj.valor_total_pis);				
				lista.Add("@valor_total_pis");				
				db.CreateParameter("@valor_total_pis_st", SqlDbType.Decimal, obj.valor_total_pis_st);				
				lista.Add("@valor_total_pis_st");				
				db.CreateParameter("@valor_total_cofins", SqlDbType.Decimal, obj.valor_total_cofins);				
				lista.Add("@valor_total_cofins");				
				db.CreateParameter("@valor_total_cofins_st", SqlDbType.Decimal, obj.valor_total_cofins_st);				
				lista.Add("@valor_total_cofins_st");				
				db.CreateParameter("@valor_total_nota_fiscal", SqlDbType.Decimal, obj.valor_total_nota_fiscal);				
				lista.Add("@valor_total_nota_fiscal");				
				db.CreateParameter("@valor_total_bc_issqn", SqlDbType.Decimal, obj.valor_total_bc_issqn);				
				lista.Add("@valor_total_bc_issqn");				
				db.CreateParameter("@valor_total_servico", SqlDbType.Decimal, obj.valor_total_servico);				
				lista.Add("@valor_total_servico");				
				db.CreateParameter("@valor_total_pis_issqn", SqlDbType.Decimal, obj.valor_total_pis_issqn);				
				lista.Add("@valor_total_pis_issqn");				
				db.CreateParameter("@valor_total_cofins_issqn", SqlDbType.Decimal, obj.valor_total_cofins_issqn);				
				lista.Add("@valor_total_cofins_issqn");				
				db.CreateParameter("@valor_total_issqn", SqlDbType.Decimal, obj.valor_total_issqn);				
				lista.Add("@valor_total_issqn");				
				db.CreateParameter("@valor_total_ret_pis", SqlDbType.Decimal, obj.valor_total_ret_pis);				
				lista.Add("@valor_total_ret_pis");				
				db.CreateParameter("@valor_total_ret_cofins", SqlDbType.Decimal, obj.valor_total_ret_cofins);				
				lista.Add("@valor_total_ret_cofins");				
				db.CreateParameter("@valor_total_ret_csll", SqlDbType.Decimal, obj.valor_total_ret_csll);				
				lista.Add("@valor_total_ret_csll");				
				db.CreateParameter("@valor_total_bc_irrf", SqlDbType.Decimal, obj.valor_total_bc_irrf);				
				lista.Add("@valor_total_bc_irrf");				
				db.CreateParameter("@valor_total_irrf", SqlDbType.Decimal, obj.valor_total_irrf);				
				lista.Add("@valor_total_irrf");				
				db.CreateParameter("@valor_total_bc_ret_prev", SqlDbType.Decimal, obj.valor_total_bc_ret_prev);				
				lista.Add("@valor_total_bc_ret_prev");				
				db.CreateParameter("@valor_total_ret_prev", SqlDbType.Decimal, obj.valor_total_ret_prev);				
				lista.Add("@valor_total_ret_prev");				
	
				string query = String.Format("Insert Into tb_nf ({0}) Values ({1}); SELECT SCOPE_IDENTITY()",  string.Join(",",lista.ToArray()).ToString().Replace("@", ""), string.Join(",",lista.ToArray()).ToString());
				ds = db.ExecuteQuery(query);
				
				return Convert.ToInt32(ds.Tables[0].Rows[0][0].ToString());
			}
			catch (Exception)
       		{
            	throw;
        	}
		}

        public int UltimoNumeroNotaFiscal(int id_empresa, int id_operacao )
        {
            DAO_DATABASE db = new DAO_DATABASE();
            DataSet ds = new DataSet();
            int numero = 0;
            try
            {

                StringBuilder sb = new StringBuilder();
                sb.Append("select isnull(max(num_nota_fiscal),0) from tb_nf where id_empresa = @id_empresa and id_operacao =@id_operacao");
                db.CreateParameter("@id_empresa", SqlDbType.Int, id_empresa);
                db.CreateParameter("@id_operacao", SqlDbType.Int, id_operacao);
                ds = db.ExecuteQuery(sb.ToString());

                if(!db.DataSetIsEmpty(ds))
                {
                    numero = Convert.ToInt32( ds.Tables[0].Rows[0][0].ToString());
                }

                return numero;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                ds.Dispose();
            }
         

        }
		
		/// <summary>
		/// Update via aplicacao
		/// </summary>			
		public void Alterar(OBJ_TB_NF obj)
		{
			try
			{
				DAO_DATABASE db = new DAO_DATABASE();
				List<string> lista = new List<string>();
	
				db.CreateParameter("@id", SqlDbType.Int, obj.id);
				
	
				db.CreateParameter("@chave", SqlDbType.VarChar, obj.chave);
				lista.Add("chave = @chave");
                db.CreateParameter("@protocolo", SqlDbType.VarChar, obj.protocolo);
                lista.Add("protocolo = @protocolo");
                db.CreateParameter("@dt_protocolo", SqlDbType.VarChar, obj.dt_protocolo);
                lista.Add("dt_protocolo = @dt_protocolo");
                db.CreateParameter("@num_recibo", SqlDbType.VarChar, obj.num_recibo);
                lista.Add("num_recibo = @num_recibo");
                db.CreateParameter("@dt_recibo", SqlDbType.VarChar, obj.dt_recibo);
                lista.Add("dt_recibo = @dt_recibo");				
				db.CreateParameter("@id_operacao", SqlDbType.Int, obj.id_operacao);
				lista.Add("id_operacao = @id_operacao");
				db.CreateParameter("@id_versao", SqlDbType.Int, obj.id_versao);
				lista.Add("id_versao = @id_versao");
				db.CreateParameter("@id_empresa", SqlDbType.Int, obj.id_empresa);
				lista.Add("id_empresa = @id_empresa");
				db.CreateParameter("@id_ordem_servico", SqlDbType.Int, obj.id_ordem_servico);
				lista.Add("id_ordem_servico = @id_ordem_servico");
				db.CreateParameter("@id_pedido", SqlDbType.Int, obj.id_pedido);
				lista.Add("id_pedido = @id_pedido");
				db.CreateParameter("@id_cadastro", SqlDbType.Int, obj.id_cadastro);
				lista.Add("id_cadastro = @id_cadastro");
				db.CreateParameter("@id_tipo_frete", SqlDbType.Int, obj.id_tipo_frete);
				lista.Add("id_tipo_frete = @id_tipo_frete");
				db.CreateParameter("@id_forma_pagamento", SqlDbType.Int, obj.id_forma_pagamento);
				lista.Add("id_forma_pagamento = @id_forma_pagamento");
				db.CreateParameter("@id_condicao_pagamento", SqlDbType.Int, obj.id_condicao_pagamento);
				lista.Add("id_condicao_pagamento = @id_condicao_pagamento");
				db.CreateParameter("@id_endereco_retirada", SqlDbType.Int, obj.id_endereco_retirada);
				lista.Add("id_endereco_retirada = @id_endereco_retirada");
				db.CreateParameter("@id_endereco_entrega", SqlDbType.Int, obj.id_endereco_entrega);
				lista.Add("id_endereco_entrega = @id_endereco_entrega");
				db.CreateParameter("@id_usuario_vendedor", SqlDbType.Int, obj.id_usuario_vendedor);
				lista.Add("id_usuario_vendedor = @id_usuario_vendedor");
				db.CreateParameter("@id_usuario_criador", SqlDbType.Int, obj.id_usuario_criador);
				lista.Add("id_usuario_criador = @id_usuario_criador");
				db.CreateParameter("@id_status", SqlDbType.Int, obj.id_status);
				lista.Add("id_status = @id_status");
				db.CreateParameter("@id_mod_doc_fiscal", SqlDbType.Char, obj.id_mod_doc_fiscal);
				lista.Add("id_mod_doc_fiscal = @id_mod_doc_fiscal");
				db.CreateParameter("@num_nota_fiscal", SqlDbType.Int, obj.num_nota_fiscal);
				lista.Add("num_nota_fiscal = @num_nota_fiscal");
				db.CreateParameter("@serie", SqlDbType.Int, obj.serie);
				lista.Add("serie = @serie");
				db.CreateParameter("@dt_emissao", SqlDbType.DateTime, obj.dt_emissao);
				lista.Add("dt_emissao = @dt_emissao");
				db.CreateParameter("@dt_entrada_saida", SqlDbType.DateTime, obj.dt_entrada_saida);
				lista.Add("dt_entrada_saida = @dt_entrada_saida");
				db.CreateParameter("@id_forma_impressao", SqlDbType.Int, obj.id_forma_impressao);
				lista.Add("id_forma_impressao = @id_forma_impressao");
				db.CreateParameter("@id_tipo_emissao", SqlDbType.Int, obj.id_tipo_emissao);
				lista.Add("id_tipo_emissao = @id_tipo_emissao");
				db.CreateParameter("@digito_verificador", SqlDbType.Int, obj.digito_verificador);
				lista.Add("digito_verificador = @digito_verificador");
				db.CreateParameter("@id_ambiente", SqlDbType.Int, obj.id_ambiente);
				lista.Add("id_ambiente = @id_ambiente");
				db.CreateParameter("@id_finalidade", SqlDbType.Int, obj.id_finalidade);
				lista.Add("id_finalidade = @id_finalidade");
				db.CreateParameter("@id_processo_emissao", SqlDbType.Int, obj.id_processo_emissao);
				lista.Add("id_processo_emissao = @id_processo_emissao");
				db.CreateParameter("@versao_aplicativo", SqlDbType.VarChar, obj.versao_aplicativo);
				lista.Add("versao_aplicativo = @versao_aplicativo");
				db.CreateParameter("@cfop", SqlDbType.Int, obj.cfop);
				lista.Add("cfop = @cfop");
				db.CreateParameter("@dt_contingencia", SqlDbType.DateTime, obj.dt_contingencia);
				lista.Add("dt_contingencia = @dt_contingencia");
				db.CreateParameter("@desc_justificativa", SqlDbType.VarChar, obj.desc_justificativa);
				lista.Add("desc_justificativa = @desc_justificativa");
				db.CreateParameter("@valor_total_bc_icms", SqlDbType.Decimal, obj.valor_total_bc_icms);
				lista.Add("valor_total_bc_icms = @valor_total_bc_icms");
				db.CreateParameter("@valor_total_icms", SqlDbType.Decimal, obj.valor_total_icms);
				lista.Add("valor_total_icms = @valor_total_icms");
				db.CreateParameter("@valor_total_bc_icms_st", SqlDbType.Decimal, obj.valor_total_bc_icms_st);
				lista.Add("valor_total_bc_icms_st = @valor_total_bc_icms_st");
				db.CreateParameter("@valor_total_icms_st", SqlDbType.Decimal, obj.valor_total_icms_st);
				lista.Add("valor_total_icms_st = @valor_total_icms_st");
				db.CreateParameter("@valor_total_produto", SqlDbType.Decimal, obj.valor_total_produto);
				lista.Add("valor_total_produto = @valor_total_produto");
				db.CreateParameter("@valor_total_frete", SqlDbType.Decimal, obj.valor_total_frete);
				lista.Add("valor_total_frete = @valor_total_frete");
				db.CreateParameter("@valor_total_seguro", SqlDbType.Decimal, obj.valor_total_seguro);
				lista.Add("valor_total_seguro = @valor_total_seguro");
				db.CreateParameter("@valor_total_desconto", SqlDbType.Decimal, obj.valor_total_desconto);
				lista.Add("valor_total_desconto = @valor_total_desconto");
				db.CreateParameter("@valor_total_outro", SqlDbType.Decimal, obj.valor_total_outro);
				lista.Add("valor_total_outro = @valor_total_outro");
				db.CreateParameter("@valor_total_ii", SqlDbType.Decimal, obj.valor_total_ii);
				lista.Add("valor_total_ii = @valor_total_ii");
				db.CreateParameter("@valor_total_ipi", SqlDbType.Decimal, obj.valor_total_ipi);
				lista.Add("valor_total_ipi = @valor_total_ipi");
				db.CreateParameter("@valor_total_pis", SqlDbType.Decimal, obj.valor_total_pis);
				lista.Add("valor_total_pis = @valor_total_pis");
				db.CreateParameter("@valor_total_pis_st", SqlDbType.Decimal, obj.valor_total_pis_st);
				lista.Add("valor_total_pis_st = @valor_total_pis_st");
				db.CreateParameter("@valor_total_cofins", SqlDbType.Decimal, obj.valor_total_cofins);
				lista.Add("valor_total_cofins = @valor_total_cofins");
				db.CreateParameter("@valor_total_cofins_st", SqlDbType.Decimal, obj.valor_total_cofins_st);
				lista.Add("valor_total_cofins_st = @valor_total_cofins_st");
				db.CreateParameter("@valor_total_nota_fiscal", SqlDbType.Decimal, obj.valor_total_nota_fiscal);
				lista.Add("valor_total_nota_fiscal = @valor_total_nota_fiscal");
				db.CreateParameter("@valor_total_bc_issqn", SqlDbType.Decimal, obj.valor_total_bc_issqn);
				lista.Add("valor_total_bc_issqn = @valor_total_bc_issqn");
				db.CreateParameter("@valor_total_servico", SqlDbType.Decimal, obj.valor_total_servico);
				lista.Add("valor_total_servico = @valor_total_servico");
				db.CreateParameter("@valor_total_pis_issqn", SqlDbType.Decimal, obj.valor_total_pis_issqn);
				lista.Add("valor_total_pis_issqn = @valor_total_pis_issqn");
				db.CreateParameter("@valor_total_cofins_issqn", SqlDbType.Decimal, obj.valor_total_cofins_issqn);
				lista.Add("valor_total_cofins_issqn = @valor_total_cofins_issqn");
				db.CreateParameter("@valor_total_issqn", SqlDbType.Decimal, obj.valor_total_issqn);
				lista.Add("valor_total_issqn = @valor_total_issqn");
				db.CreateParameter("@valor_total_ret_pis", SqlDbType.Decimal, obj.valor_total_ret_pis);
				lista.Add("valor_total_ret_pis = @valor_total_ret_pis");
				db.CreateParameter("@valor_total_ret_cofins", SqlDbType.Decimal, obj.valor_total_ret_cofins);
				lista.Add("valor_total_ret_cofins = @valor_total_ret_cofins");
				db.CreateParameter("@valor_total_ret_csll", SqlDbType.Decimal, obj.valor_total_ret_csll);
				lista.Add("valor_total_ret_csll = @valor_total_ret_csll");
				db.CreateParameter("@valor_total_bc_irrf", SqlDbType.Decimal, obj.valor_total_bc_irrf);
				lista.Add("valor_total_bc_irrf = @valor_total_bc_irrf");
				db.CreateParameter("@valor_total_irrf", SqlDbType.Decimal, obj.valor_total_irrf);
				lista.Add("valor_total_irrf = @valor_total_irrf");
				db.CreateParameter("@valor_total_bc_ret_prev", SqlDbType.Decimal, obj.valor_total_bc_ret_prev);
				lista.Add("valor_total_bc_ret_prev = @valor_total_bc_ret_prev");
				db.CreateParameter("@valor_total_ret_prev", SqlDbType.Decimal, obj.valor_total_ret_prev);
				lista.Add("valor_total_ret_prev = @valor_total_ret_prev");
	
				string query = String.Format("Update TB_NF Set {0} Where id = @id", string.Join(",",lista.ToArray()).ToString());
				db.ExecuteQuery(query);
			}
			catch (Exception)
       		{
            	throw;
        	}
		}	
		
		/// <summary>
		/// Delete viaaplicacao
		/// </summary>	
		public void Excluir(OBJ_TB_NF obj)
		{
			try
			{
				DAO_DATABASE db = new DAO_DATABASE();
				StringBuilder queryParameters = new StringBuilder();
				db.CreateParameter("@id", SqlDbType.Int, obj.id);
		
				string query = "Delete tb_nf Where id = @id";			
				db.ExecuteQuery(query);
			}
			catch (Exception)
       		{
            	throw;
        	}
		}
	
	
		/// <summary>
		/// Lista objeto
		/// </summary>						
		public List<OBJ_TB_NF> SelecionarLista()
    	{
        	try
        	{
				DAO_DATABASE db = new DAO_DATABASE();
				List<OBJ_TB_NF> lista = new List<OBJ_TB_NF>();
				OBJ_TB_NF obj = null;
				DataTable dt = new DataTable();
				DataSet ds = new DataSet();
				StringBuilder sb = new StringBuilder();
                sb.Append("SELECT     tb_nf.id, tb_nf.chave, tb_nf.protocolo, tb_nf.dt_protocolo, tb_nf.num_recibo, tb_nf.dt_recibo, tb_nf.id_operacao, tb_nf.id_versao, tb_nf.id_empresa, tb_nf.id_ordem_servico, tb_nf.id_pedido, tb_nf.id_cadastro, ");
                sb.Append(" tb_nf.id_tipo_frete, tb_nf.id_forma_pagamento, tb_nf.id_condicao_pagamento, tb_nf.id_endereco_retirada, tb_nf.id_endereco_entrega, tb_nf.id_usuario_vendedor, ");
                sb.Append(" tb_nf.id_usuario_criador, tb_nf.id_status, tb_nf.id_mod_doc_fiscal, tb_nf.num_nota_fiscal, tb_nf.serie, tb_nf.dt_emissao, tb_nf.dt_entrada_saida, ");
                sb.Append("           tb_nf.id_forma_impressao, tb_nf.id_tipo_emissao, tb_nf.digito_verificador, tb_nf.id_ambiente, tb_nf.id_finalidade, tb_nf.id_processo_emissao, ");
                sb.Append(" tb_nf.versao_aplicativo, tb_nf.cfop, tb_nf.dt_contingencia, tb_nf.desc_justificativa, tb_nf.valor_total_bc_icms, tb_nf.valor_total_icms, tb_nf.valor_total_bc_icms_st, ");
                sb.Append(" tb_nf.valor_total_icms_st, tb_nf.valor_total_produto, tb_nf.valor_total_frete, tb_nf.valor_total_seguro, tb_nf.valor_total_desconto, tb_nf.valor_total_outro, ");
                sb.Append(" tb_nf.valor_total_ii, tb_nf.valor_total_ipi, tb_nf.valor_total_pis, tb_nf.valor_total_pis_st, tb_nf.valor_total_cofins, tb_nf.valor_total_cofins_st, ");
                sb.Append(" tb_nf.valor_total_nota_fiscal, tb_nf.valor_total_bc_issqn, tb_nf.valor_total_servico, tb_nf.valor_total_pis_issqn, tb_nf.valor_total_cofins_issqn, ");
                sb.Append(" tb_nf.valor_total_issqn, tb_nf.valor_total_ret_pis, tb_nf.valor_total_ret_cofins, tb_nf.valor_total_ret_csll, tb_nf.valor_total_bc_irrf, tb_nf.valor_total_irrf, ");
                sb.Append(" tb_nf.valor_total_bc_ret_prev, tb_nf.valor_total_ret_prev, tb_nf.qtd_item, tb_empresa.nome AS nome_empresa, tb_cadastro.nome AS nome_cadastro, ");
                sb.Append(" tb_nf_status.desc_status, tb_forma_pagamento.desc_forma_pagamento, tb_condicao_pagamento.desc_condicao_pagamento, tb_nf_finalidade.desc_finalidade, ");
                sb.Append(" tb_nf_forma_impressao.desc_forma_impressao, tb_nf_processo_emissao.desc_processo_emissao, tb_nf_ambiente.desc_ambiente ");
                sb.Append(" FROM         tb_nf INNER JOIN ");
                sb.Append(" tb_empresa ON tb_nf.id_empresa = tb_empresa.id INNER JOIN ");
                sb.Append(" tb_cadastro ON tb_nf.id_cadastro = tb_cadastro.id INNER JOIN ");
                sb.Append(" tb_nf_status ON tb_nf.id_status = tb_nf_status.id INNER JOIN ");
                sb.Append(" tb_condicao_pagamento ON tb_nf.id_condicao_pagamento = tb_condicao_pagamento.id INNER JOIN ");
                sb.Append(" tb_forma_pagamento ON tb_nf.id_forma_pagamento = tb_forma_pagamento.id INNER JOIN ");
                sb.Append(" tb_nf_finalidade ON tb_nf.id_finalidade = tb_nf_finalidade.id INNER JOIN ");
                sb.Append(" tb_nf_forma_impressao ON tb_nf.id_forma_impressao = tb_nf_forma_impressao.id INNER JOIN ");
                sb.Append(" tb_nf_processo_emissao ON tb_nf.id_processo_emissao = tb_nf_processo_emissao.id INNER JOIN ");
                sb.Append(" tb_nf_ambiente ON tb_nf.id_ambiente = tb_nf_ambiente.id");

        
	            ds = db.ExecuteQuery(sb.ToString());
				
				if(!db.DataSetIsEmpty(ds))
				{
					dt = ds.Tables[0];
					
					foreach (DataRow dr in dt.Rows)
					{											
						obj = new OBJ_TB_NF();
						Set(obj,dr);
						lista.Add(obj);
		
					}
				}
				return lista;
        	}
        	catch (Exception)
       		{
            	throw;
        	}

    	}
		
		/// <summary>
		/// Set Objeto
		/// </summary>	
		private void Set(OBJ_TB_NF obj,DataRow dr)
		{
			obj.id = Convert.ToInt32(dr["id"]);						
			obj.chave = dr["chave"] == DBNull.Value ?  string.Empty : dr["chave"].ToString() ;
			obj.protocolo = dr["protocolo"] == DBNull.Value ?  string.Empty : dr["protocolo"].ToString();
            obj.dt_protocolo = dr["dt_protocolo"] == DBNull.Value ? string.Empty : dr["dt_protocolo"].ToString();
            obj.num_recibo = dr["num_recibo"] == DBNull.Value ? string.Empty : dr["num_recibo"].ToString();
            obj.dt_recibo = dr["dt_recibo"] == DBNull.Value ? string.Empty : dr["dt_recibo"].ToString();
			obj.id_operacao = Convert.ToInt32(dr["id_operacao"].ToString()) ;	
			obj.id_versao = Convert.ToInt32(dr["id_versao"].ToString()) ;	
			obj.id_empresa = Convert.ToInt32(dr["id_empresa"].ToString()) ;	
			obj.id_ordem_servico = Convert.ToInt32(dr["id_ordem_servico"].ToString()) ;	
			obj.id_pedido = Convert.ToInt32(dr["id_pedido"].ToString()) ;	
			obj.id_cadastro = Convert.ToInt32(dr["id_cadastro"].ToString()) ;	
			obj.id_tipo_frete = Convert.ToInt32(dr["id_tipo_frete"].ToString()) ;	
			obj.id_forma_pagamento = Convert.ToInt32(dr["id_forma_pagamento"].ToString()) ;	
			obj.id_condicao_pagamento = Convert.ToInt32(dr["id_condicao_pagamento"].ToString()) ;	
			obj.id_endereco_retirada = Convert.ToInt32(dr["id_endereco_retirada"].ToString()) ;	
			obj.id_endereco_entrega = Convert.ToInt32(dr["id_endereco_entrega"].ToString()) ;	
			obj.id_usuario_vendedor = Convert.ToInt32(dr["id_usuario_vendedor"].ToString()) ;	
			obj.id_usuario_criador = Convert.ToInt32(dr["id_usuario_criador"].ToString()) ;	
			obj.id_status = Convert.ToInt32(dr["id_status"].ToString()) ;	
			obj.id_mod_doc_fiscal = dr["id_mod_doc_fiscal"] == DBNull.Value ?  string.Empty : dr["id_mod_doc_fiscal"].ToString() ;
			obj.num_nota_fiscal = Convert.ToInt32(dr["num_nota_fiscal"].ToString()) ;	
			obj.serie = Convert.ToInt32(dr["serie"].ToString()) ;	
			obj.dt_emissao = dr["dt_emissao"] == DBNull.Value ? (DateTime?)null :  Convert.ToDateTime(dr["dt_emissao"].ToString()) ;						
			obj.dt_entrada_saida = dr["dt_entrada_saida"] == DBNull.Value ? (DateTime?)null :  Convert.ToDateTime(dr["dt_entrada_saida"].ToString()) ;						
			obj.id_forma_impressao = Convert.ToInt32(dr["id_forma_impressao"].ToString()) ;	
			obj.id_tipo_emissao = Convert.ToInt32(dr["id_tipo_emissao"].ToString()) ;	
			obj.digito_verificador = Convert.ToInt32(dr["digito_verificador"].ToString()) ;	
			obj.id_ambiente = Convert.ToInt32(dr["id_ambiente"].ToString()) ;	
			obj.id_finalidade = Convert.ToInt32(dr["id_finalidade"].ToString()) ;	
			obj.id_processo_emissao = Convert.ToInt32(dr["id_processo_emissao"].ToString()) ;	
			obj.versao_aplicativo = dr["versao_aplicativo"] == DBNull.Value ?  string.Empty : dr["versao_aplicativo"].ToString() ;
			obj.cfop = Convert.ToInt32(dr["cfop"].ToString()) ;	
			obj.dt_contingencia = dr["dt_contingencia"] == DBNull.Value ? (DateTime?)null :  Convert.ToDateTime(dr["dt_contingencia"].ToString()) ;						
			obj.desc_justificativa = dr["desc_justificativa"] == DBNull.Value ?  string.Empty : dr["desc_justificativa"].ToString() ;
			obj.valor_total_bc_icms = dr["valor_total_bc_icms"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_bc_icms"].ToString()) ;
			obj.valor_total_icms = dr["valor_total_icms"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_icms"].ToString()) ;
			obj.valor_total_bc_icms_st = dr["valor_total_bc_icms_st"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_bc_icms_st"].ToString()) ;
			obj.valor_total_icms_st = dr["valor_total_icms_st"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_icms_st"].ToString()) ;
			obj.valor_total_produto = dr["valor_total_produto"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_produto"].ToString()) ;
			obj.valor_total_frete = dr["valor_total_frete"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_frete"].ToString()) ;
			obj.valor_total_seguro = dr["valor_total_seguro"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_seguro"].ToString()) ;
			obj.valor_total_desconto = dr["valor_total_desconto"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_desconto"].ToString()) ;
			obj.valor_total_outro = dr["valor_total_outro"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_outro"].ToString()) ;
			obj.valor_total_ii = dr["valor_total_ii"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_ii"].ToString()) ;
			obj.valor_total_ipi = dr["valor_total_ipi"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_ipi"].ToString()) ;
			obj.valor_total_pis = dr["valor_total_pis"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_pis"].ToString()) ;
			obj.valor_total_pis_st = dr["valor_total_pis_st"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_pis_st"].ToString()) ;
			obj.valor_total_cofins = dr["valor_total_cofins"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_cofins"].ToString()) ;
			obj.valor_total_cofins_st = dr["valor_total_cofins_st"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_cofins_st"].ToString()) ;
			obj.valor_total_nota_fiscal = dr["valor_total_nota_fiscal"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_nota_fiscal"].ToString()) ;
			obj.valor_total_bc_issqn = dr["valor_total_bc_issqn"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_bc_issqn"].ToString()) ;
			obj.valor_total_servico = dr["valor_total_servico"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_servico"].ToString()) ;
			obj.valor_total_pis_issqn = dr["valor_total_pis_issqn"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_pis_issqn"].ToString()) ;
			obj.valor_total_cofins_issqn = dr["valor_total_cofins_issqn"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_cofins_issqn"].ToString()) ;
			obj.valor_total_issqn = dr["valor_total_issqn"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_issqn"].ToString()) ;
			obj.valor_total_ret_pis = dr["valor_total_ret_pis"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_ret_pis"].ToString()) ;
			obj.valor_total_ret_cofins = dr["valor_total_ret_cofins"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_ret_cofins"].ToString()) ;
			obj.valor_total_ret_csll = dr["valor_total_ret_csll"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_ret_csll"].ToString()) ;
			obj.valor_total_bc_irrf = dr["valor_total_bc_irrf"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_bc_irrf"].ToString()) ;
			obj.valor_total_irrf = dr["valor_total_irrf"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_irrf"].ToString()) ;
			obj.valor_total_bc_ret_prev = dr["valor_total_bc_ret_prev"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_bc_ret_prev"].ToString()) ;
			obj.valor_total_ret_prev = dr["valor_total_ret_prev"] == DBNull.Value ?  0 : Convert.ToDecimal(dr["valor_total_ret_prev"].ToString()) ;
			
		}						
				



		/// <summary>
		/// Selecionar Objeto Por ID
		/// </summary>	
		public OBJ_TB_NF SelecionarObjetoPorId(int id)
		{
			try
			{
				DAO_DATABASE db = new DAO_DATABASE();
				OBJ_TB_NF obj = new OBJ_TB_NF();
				DataSet ds = new DataSet();				
				DataTable dt = new DataTable();
				
				db.CreateParameter("@id", SqlDbType.Int, id);
				StringBuilder sb = new StringBuilder();
                sb.Append("SELECT     tb_nf.id, tb_nf.chave, tb_nf.protocolo, tb_nf.dt_protocolo, tb_nf.num_recibo, tb_nf.dt_recibo, tb_nf.id_operacao, tb_nf.id_versao, tb_nf.id_empresa, tb_nf.id_ordem_servico, tb_nf.id_pedido, tb_nf.id_cadastro, ");
                sb.Append(" tb_nf.id_tipo_frete, tb_nf.id_forma_pagamento, tb_nf.id_condicao_pagamento, tb_nf.id_endereco_retirada, tb_nf.id_endereco_entrega, tb_nf.id_usuario_vendedor, ");
                sb.Append(" tb_nf.id_usuario_criador, tb_nf.id_status, tb_nf.id_mod_doc_fiscal, tb_nf.num_nota_fiscal, tb_nf.serie, tb_nf.dt_emissao, tb_nf.dt_entrada_saida, ");
                sb.Append("           tb_nf.id_forma_impressao, tb_nf.id_tipo_emissao, tb_nf.digito_verificador, tb_nf.id_ambiente, tb_nf.id_finalidade, tb_nf.id_processo_emissao, ");
                sb.Append(" tb_nf.versao_aplicativo, tb_nf.cfop, tb_nf.dt_contingencia, tb_nf.desc_justificativa, tb_nf.valor_total_bc_icms, tb_nf.valor_total_icms, tb_nf.valor_total_bc_icms_st, ");
                sb.Append(" tb_nf.valor_total_icms_st, tb_nf.valor_total_produto, tb_nf.valor_total_frete, tb_nf.valor_total_seguro, tb_nf.valor_total_desconto, tb_nf.valor_total_outro, ");
                sb.Append(" tb_nf.valor_total_ii, tb_nf.valor_total_ipi, tb_nf.valor_total_pis, tb_nf.valor_total_pis_st, tb_nf.valor_total_cofins, tb_nf.valor_total_cofins_st, ");
                sb.Append(" tb_nf.valor_total_nota_fiscal, tb_nf.valor_total_bc_issqn, tb_nf.valor_total_servico, tb_nf.valor_total_pis_issqn, tb_nf.valor_total_cofins_issqn, ");
                sb.Append(" tb_nf.valor_total_issqn, tb_nf.valor_total_ret_pis, tb_nf.valor_total_ret_cofins, tb_nf.valor_total_ret_csll, tb_nf.valor_total_bc_irrf, tb_nf.valor_total_irrf, ");
                sb.Append(" tb_nf.valor_total_bc_ret_prev, tb_nf.valor_total_ret_prev, tb_nf.qtd_item, tb_empresa.nome AS nome_empresa, tb_cadastro.nome AS nome_cadastro, ");
                sb.Append(" tb_nf_status.desc_status, tb_forma_pagamento.desc_forma_pagamento, tb_condicao_pagamento.desc_condicao_pagamento, tb_nf_finalidade.desc_finalidade, ");
                sb.Append(" tb_nf_forma_impressao.desc_forma_impressao, tb_nf_processo_emissao.desc_processo_emissao, tb_nf_ambiente.desc_ambiente ");
                sb.Append(" FROM         tb_nf INNER JOIN ");
                sb.Append(" tb_empresa ON tb_nf.id_empresa = tb_empresa.id INNER JOIN ");
                sb.Append(" tb_cadastro ON tb_nf.id_cadastro = tb_cadastro.id INNER JOIN ");
                sb.Append(" tb_nf_status ON tb_nf.id_status = tb_nf_status.id INNER JOIN ");
                sb.Append(" tb_condicao_pagamento ON tb_nf.id_condicao_pagamento = tb_condicao_pagamento.id INNER JOIN ");
                sb.Append(" tb_forma_pagamento ON tb_nf.id_forma_pagamento = tb_forma_pagamento.id INNER JOIN ");
                sb.Append(" tb_nf_finalidade ON tb_nf.id_finalidade = tb_nf_finalidade.id INNER JOIN ");
                sb.Append(" tb_nf_forma_impressao ON tb_nf.id_forma_impressao = tb_nf_forma_impressao.id INNER JOIN ");
                sb.Append(" tb_nf_processo_emissao ON tb_nf.id_processo_emissao = tb_nf_processo_emissao.id INNER JOIN ");
                sb.Append(" tb_nf_ambiente ON tb_nf.id_ambiente = tb_nf_ambiente.id");
                sb.Append(" WHERE tb_nf.id = @id");
				
				ds = db.ExecuteQuery(sb.ToString());				
				
				if(!db.DataSetIsEmpty(ds))
				{
					dt = ds.Tables[0];
					
					foreach (DataRow dr in dt.Rows)
                	{
						obj = new OBJ_TB_NF();
						Set(obj,dr);																			
					}
					return obj;
					
				}
				else
				{
					return null;	
				}			
			}
			catch (Exception)
       		{
            	throw;
        	}
			
		}
					
		
		
		/// <summary>
		/// Lista objeto Parametro Where OrderBy
		/// </summary>							
		public List<OBJ_TB_NF> SelecionarLista(String Where, String OrderBy)
    	{
        	try
        	{
				DAO_DATABASE db = new DAO_DATABASE();
				OBJ_TB_NF obj = null;
				DataSet ds = new DataSet();
				DataTable dt = new DataTable();
				List<OBJ_TB_NF> lista = new List<OBJ_TB_NF>();
				
				StringBuilder sb = new StringBuilder();
				db.CreateParameter("@Where",SqlDbType.VarChar, Where );
				db.CreateParameter("@OrderBy", SqlDbType.VarChar, OrderBy );

                sb.Append("SELECT     tb_nf.id, tb_nf.chave, tb_nf.protocolo, tb_nf.dt_protocolo, tb_nf.num_recibo, tb_nf.dt_recibo, tb_nf.id_operacao, tb_nf.id_versao, tb_nf.id_empresa, tb_nf.id_ordem_servico, tb_nf.id_pedido, tb_nf.id_cadastro, ");
                sb.Append(" tb_nf.id_tipo_frete, tb_nf.id_forma_pagamento, tb_nf.id_condicao_pagamento, tb_nf.id_endereco_retirada, tb_nf.id_endereco_entrega, tb_nf.id_usuario_vendedor, ");
                sb.Append(" tb_nf.id_usuario_criador, tb_nf.id_status, tb_nf.id_mod_doc_fiscal, tb_nf.num_nota_fiscal, tb_nf.serie, tb_nf.dt_emissao, tb_nf.dt_entrada_saida, ");
                sb.Append("           tb_nf.id_forma_impressao, tb_nf.id_tipo_emissao, tb_nf.digito_verificador, tb_nf.id_ambiente, tb_nf.id_finalidade, tb_nf.id_processo_emissao, ");
                sb.Append(" tb_nf.versao_aplicativo, tb_nf.cfop, tb_nf.dt_contingencia, tb_nf.desc_justificativa, tb_nf.valor_total_bc_icms, tb_nf.valor_total_icms, tb_nf.valor_total_bc_icms_st, ");
                sb.Append(" tb_nf.valor_total_icms_st, tb_nf.valor_total_produto, tb_nf.valor_total_frete, tb_nf.valor_total_seguro, tb_nf.valor_total_desconto, tb_nf.valor_total_outro, ");
                sb.Append(" tb_nf.valor_total_ii, tb_nf.valor_total_ipi, tb_nf.valor_total_pis, tb_nf.valor_total_pis_st, tb_nf.valor_total_cofins, tb_nf.valor_total_cofins_st, ");
                sb.Append(" tb_nf.valor_total_nota_fiscal, tb_nf.valor_total_bc_issqn, tb_nf.valor_total_servico, tb_nf.valor_total_pis_issqn, tb_nf.valor_total_cofins_issqn, ");
                sb.Append(" tb_nf.valor_total_issqn, tb_nf.valor_total_ret_pis, tb_nf.valor_total_ret_cofins, tb_nf.valor_total_ret_csll, tb_nf.valor_total_bc_irrf, tb_nf.valor_total_irrf, ");
                sb.Append(" tb_nf.valor_total_bc_ret_prev, tb_nf.valor_total_ret_prev, tb_nf.qtd_item, tb_empresa.nome AS nome_empresa, tb_cadastro.nome AS nome_cadastro, ");
                sb.Append(" tb_nf_status.desc_status, tb_forma_pagamento.desc_forma_pagamento, tb_condicao_pagamento.desc_condicao_pagamento, tb_nf_finalidade.desc_finalidade, ");
                sb.Append(" tb_nf_forma_impressao.desc_forma_impressao, tb_nf_processo_emissao.desc_processo_emissao, tb_nf_ambiente.desc_ambiente ");
                sb.Append(" FROM         tb_nf INNER JOIN ");
                sb.Append(" tb_empresa ON tb_nf.id_empresa = tb_empresa.id INNER JOIN ");
                sb.Append(" tb_cadastro ON tb_nf.id_cadastro = tb_cadastro.id INNER JOIN ");
                sb.Append(" tb_nf_status ON tb_nf.id_status = tb_nf_status.id INNER JOIN ");
                sb.Append(" tb_condicao_pagamento ON tb_nf.id_condicao_pagamento = tb_condicao_pagamento.id INNER JOIN ");
                sb.Append(" tb_forma_pagamento ON tb_nf.id_forma_pagamento = tb_forma_pagamento.id INNER JOIN ");
                sb.Append(" tb_nf_finalidade ON tb_nf.id_finalidade = tb_nf_finalidade.id INNER JOIN ");
                sb.Append(" tb_nf_forma_impressao ON tb_nf.id_forma_impressao = tb_nf_forma_impressao.id INNER JOIN ");
                sb.Append(" tb_nf_processo_emissao ON tb_nf.id_processo_emissao = tb_nf_processo_emissao.id INNER JOIN ");
                sb.Append(" tb_nf_ambiente ON tb_nf.id_ambiente = tb_nf_ambiente.id");

				if(Where != string.Empty)				
				sb.Append(string.Format(" Where {0} ",Where));
				if(OrderBy != string.Empty)
				sb.Append(string.Format(" Order by {0}",OrderBy));
				
				ds = db.ExecuteQuery(sb.ToString());
				
				if(!db.DataSetIsEmpty(ds))
				{
					dt = ds.Tables[0];
					foreach (DataRow dr in dt.Rows)
					{						
						obj = new OBJ_TB_NF();
						Set(obj,dr);			
						lista.Add(obj);
					}
				}
				return lista;
        	}
        	catch (Exception)
       		{
            	throw;
        	}

    	}

		
		public DataSet Selecionar(String Where, String OrderBy, int PageIndex, int PageSize )
		{
				DAO_DATABASE db = new DAO_DATABASE();
				DataSet ds = new DataSet();
				
				StringBuilder sb = new StringBuilder();
				
				PageIndex = PageSize * PageIndex;
            	PageSize =  PageIndex + PageSize;
				
		      	if (OrderBy == string.Empty) OrderBy = "tb_nf.id";

            	sb.Append("SELECT * FROM ");
            	sb.Append(string.Format(" (SELECT ROW_NUMBER() OVER (ORDER BY {0}) AS RowNumber,",OrderBy));
                sb.Append(" tb_nf.id, tb_nf.chave, tb_nf.protocolo, tb_nf.dt_protocolo, tb_nf.num_recibo, tb_nf.dt_recibo, tb_nf.id_operacao, tb_nf.id_versao, tb_nf.id_empresa, tb_nf.id_ordem_servico, tb_nf.id_pedido, tb_nf.id_cadastro, ");
                sb.Append(" tb_nf.id_tipo_frete, tb_nf.id_forma_pagamento, tb_nf.id_condicao_pagamento, tb_nf.id_endereco_retirada, tb_nf.id_endereco_entrega, tb_nf.id_usuario_vendedor, ");
                sb.Append(" tb_nf.id_usuario_criador, tb_nf.id_status, tb_nf.id_mod_doc_fiscal, tb_nf.num_nota_fiscal, tb_nf.serie, tb_nf.dt_emissao, tb_nf.dt_entrada_saida, ");
                sb.Append("           tb_nf.id_forma_impressao, tb_nf.id_tipo_emissao, tb_nf.digito_verificador, tb_nf.id_ambiente, tb_nf.id_finalidade, tb_nf.id_processo_emissao, ");
                sb.Append(" tb_nf.versao_aplicativo, tb_nf.cfop, tb_nf.dt_contingencia, tb_nf.desc_justificativa, tb_nf.valor_total_bc_icms, tb_nf.valor_total_icms, tb_nf.valor_total_bc_icms_st, ");
                sb.Append(" tb_nf.valor_total_icms_st, tb_nf.valor_total_produto, tb_nf.valor_total_frete, tb_nf.valor_total_seguro, tb_nf.valor_total_desconto, tb_nf.valor_total_outro, ");
                sb.Append(" tb_nf.valor_total_ii, tb_nf.valor_total_ipi, tb_nf.valor_total_pis, tb_nf.valor_total_pis_st, tb_nf.valor_total_cofins, tb_nf.valor_total_cofins_st, ");
                sb.Append(" tb_nf.valor_total_nota_fiscal, tb_nf.valor_total_bc_issqn, tb_nf.valor_total_servico, tb_nf.valor_total_pis_issqn, tb_nf.valor_total_cofins_issqn, ");
                sb.Append(" tb_nf.valor_total_issqn, tb_nf.valor_total_ret_pis, tb_nf.valor_total_ret_cofins, tb_nf.valor_total_ret_csll, tb_nf.valor_total_bc_irrf, tb_nf.valor_total_irrf, ");
                sb.Append(" tb_nf.valor_total_bc_ret_prev, tb_nf.valor_total_ret_prev, tb_nf.qtd_item, tb_empresa.nome AS nome_empresa, tb_cadastro.nome AS nome_cadastro, ");
                sb.Append(" tb_nf_status.desc_status, tb_forma_pagamento.desc_forma_pagamento, tb_condicao_pagamento.desc_condicao_pagamento, tb_nf_finalidade.desc_finalidade, ");
                sb.Append(" tb_nf_forma_impressao.desc_forma_impressao, tb_nf_processo_emissao.desc_processo_emissao, tb_nf_ambiente.desc_ambiente ");
                sb.Append(" FROM         tb_nf INNER JOIN ");
                sb.Append(" tb_empresa ON tb_nf.id_empresa = tb_empresa.id INNER JOIN ");
                sb.Append(" tb_cadastro ON tb_nf.id_cadastro = tb_cadastro.id INNER JOIN ");
                sb.Append(" tb_nf_status ON tb_nf.id_status = tb_nf_status.id INNER JOIN ");
                sb.Append(" tb_condicao_pagamento ON tb_nf.id_condicao_pagamento = tb_condicao_pagamento.id INNER JOIN ");
                sb.Append(" tb_forma_pagamento ON tb_nf.id_forma_pagamento = tb_forma_pagamento.id INNER JOIN ");
                sb.Append(" tb_nf_finalidade ON tb_nf.id_finalidade = tb_nf_finalidade.id INNER JOIN ");
                sb.Append(" tb_nf_forma_impressao ON tb_nf.id_forma_impressao = tb_nf_forma_impressao.id INNER JOIN ");
                sb.Append(" tb_nf_processo_emissao ON tb_nf.id_processo_emissao = tb_nf_processo_emissao.id INNER JOIN ");
                sb.Append(" tb_nf_ambiente ON tb_nf.id_ambiente = tb_nf_ambiente.id");

				if (Where != string.Empty)
				{
					sb.Append(string.Format(" WHERE {0}", Where));
				}
				sb.Append(" ) query  ");
				sb.Append(string.Format(" WHERE RowNumber BETWEEN {0} + 1 and {1}; ",PageIndex,PageSize));

            	sb.Append("SELECT count(*) FROM tb_nf");
				if (Where != string.Empty)
				{
					sb.Append(string.Format(" WHERE {0}", Where));
				}
				ds = db.ExecuteQuery(sb.ToString());
				
				if (!db.DataSetIsEmpty(ds))
            	{
                publico.PUB_PAGINACAO.CalcularTotalDePaginas(Convert.ToDecimal(ds.Tables[1].Rows[0][0].ToString()));
            	}

				
            	return ds;
								
		}

        public void AlterarStatus(int id, int id_status)
        {
            try
            {
                DAO_DATABASE db = new DAO_DATABASE();
                DataSet ds = new DataSet();
                StringBuilder sb = new StringBuilder();

                sb.Append("UPDATE tb_nf SET id_status = @id_status WHERE id = @id");

                db.CreateParameter("@id", SqlDbType.Int, id);
                db.CreateParameter("@id_status", SqlDbType.Int, id_status);

                db.ExecuteQuery(sb.ToString());
            }
            catch (Exception)
            {
                
                throw;
            }
          
        }

        public void GravaChave(int id, string chave)
        {
            try
            {
                DAO_DATABASE db = new DAO_DATABASE();
                DataSet ds = new DataSet();
                StringBuilder sb = new StringBuilder();

                sb.Append("UPDATE tb_nf SET chave = @chave WHERE id = @id");

                db.CreateParameter("@id", SqlDbType.Int, id);
                db.CreateParameter("@chave", SqlDbType.VarChar, chave);

                db.ExecuteQuery(sb.ToString());
            }
            catch (Exception)
            {

                throw;
            }
        }


        public void GravaRecibo(int id, string num_recibo, string dt_recibo)
        {
            try
            {
                DAO_DATABASE db = new DAO_DATABASE();
                DataSet ds = new DataSet();
                StringBuilder sb = new StringBuilder();

                sb.Append("UPDATE tb_nf SET num_recibo = @num_recibo,dt_recibo = @dt_recibo  WHERE id = @id");

                db.CreateParameter("@id", SqlDbType.Int, id);
                db.CreateParameter("@num_recibo", SqlDbType.VarChar, num_recibo);
                db.CreateParameter("@dt_recibo", SqlDbType.VarChar, dt_recibo);

                db.ExecuteQuery(sb.ToString());
            }
            catch (Exception)
            {

                throw;
            }
        }

        public void GravaProtocolo(int id, string protocolo, string dt_protocolo)
        {
            try
            {
                DAO_DATABASE db = new DAO_DATABASE();
                DataSet ds = new DataSet();
                StringBuilder sb = new StringBuilder();

                sb.Append("UPDATE tb_nf SET protocolo = @protocolo,dt_protocolo = @dt_protocolo  WHERE id = @id");

                db.CreateParameter("@id", SqlDbType.Int, id);
                db.CreateParameter("@protocolo", SqlDbType.VarChar, protocolo);
                db.CreateParameter("@dt_protocolo", SqlDbType.VarChar, dt_protocolo);

                db.ExecuteQuery(sb.ToString());
            }
            catch (Exception)
            {

                throw;
            }
        }
								
		public DataSet Selecionar(String Where, String OrderBy)
        {
            DAO_DATABASE db = new DAO_DATABASE();
            DataSet ds = new DataSet();
            StringBuilder sb = new StringBuilder();


            sb.Append("SELECT     tb_nf.id, tb_nf.chave, tb_nf.protocolo, tb_nf.dt_protocolo, tb_nf.num_recibo, tb_nf.dt_recibo, tb_nf.id_operacao, tb_nf.id_versao, tb_nf.id_empresa, tb_nf.id_ordem_servico, tb_nf.id_pedido, tb_nf.id_cadastro, ");
            sb.Append(" tb_nf.id_tipo_frete, tb_nf.id_forma_pagamento, tb_nf.id_condicao_pagamento, tb_nf.id_endereco_retirada, tb_nf.id_endereco_entrega, tb_nf.id_usuario_vendedor, ");
            sb.Append(" tb_nf.id_usuario_criador, tb_nf.id_status, tb_nf.id_mod_doc_fiscal, tb_nf.num_nota_fiscal, tb_nf.serie, tb_nf.dt_emissao, tb_nf.dt_entrada_saida, ");
            sb.Append("           tb_nf.id_forma_impressao, tb_nf.id_tipo_emissao, tb_nf.digito_verificador, tb_nf.id_ambiente, tb_nf.id_finalidade, tb_nf.id_processo_emissao, ");
            sb.Append(" tb_nf.versao_aplicativo, tb_nf.cfop, tb_nf.dt_contingencia, tb_nf.desc_justificativa, tb_nf.valor_total_bc_icms, tb_nf.valor_total_icms, tb_nf.valor_total_bc_icms_st, ");
            sb.Append(" tb_nf.valor_total_icms_st, tb_nf.valor_total_produto, tb_nf.valor_total_frete, tb_nf.valor_total_seguro, tb_nf.valor_total_desconto, tb_nf.valor_total_outro, ");
            sb.Append(" tb_nf.valor_total_ii, tb_nf.valor_total_ipi, tb_nf.valor_total_pis, tb_nf.valor_total_pis_st, tb_nf.valor_total_cofins, tb_nf.valor_total_cofins_st, ");
            sb.Append(" tb_nf.valor_total_nota_fiscal, tb_nf.valor_total_bc_issqn, tb_nf.valor_total_servico, tb_nf.valor_total_pis_issqn, tb_nf.valor_total_cofins_issqn, ");
            sb.Append(" tb_nf.valor_total_issqn, tb_nf.valor_total_ret_pis, tb_nf.valor_total_ret_cofins, tb_nf.valor_total_ret_csll, tb_nf.valor_total_bc_irrf, tb_nf.valor_total_irrf, ");
            sb.Append(" tb_nf.valor_total_bc_ret_prev, tb_nf.valor_total_ret_prev, tb_nf.qtd_item, tb_empresa.nome AS nome_empresa, tb_cadastro.nome AS nome_cadastro, ");
            sb.Append(" tb_nf_status.desc_status, tb_forma_pagamento.desc_forma_pagamento, tb_condicao_pagamento.desc_condicao_pagamento, tb_nf_finalidade.desc_finalidade, ");
            sb.Append(" tb_nf_forma_impressao.desc_forma_impressao, tb_nf_processo_emissao.desc_processo_emissao, tb_nf_ambiente.desc_ambiente ");
            sb.Append(" FROM         tb_nf INNER JOIN ");
            sb.Append(" tb_empresa ON tb_nf.id_empresa = tb_empresa.id INNER JOIN ");
            sb.Append(" tb_cadastro ON tb_nf.id_cadastro = tb_cadastro.id INNER JOIN ");
            sb.Append(" tb_nf_status ON tb_nf.id_status = tb_nf_status.id INNER JOIN ");
            sb.Append(" tb_condicao_pagamento ON tb_nf.id_condicao_pagamento = tb_condicao_pagamento.id INNER JOIN ");
            sb.Append(" tb_forma_pagamento ON tb_nf.id_forma_pagamento = tb_forma_pagamento.id INNER JOIN ");
            sb.Append(" tb_nf_finalidade ON tb_nf.id_finalidade = tb_nf_finalidade.id INNER JOIN ");
            sb.Append(" tb_nf_forma_impressao ON tb_nf.id_forma_impressao = tb_nf_forma_impressao.id INNER JOIN ");
            sb.Append(" tb_nf_processo_emissao ON tb_nf.id_processo_emissao = tb_nf_processo_emissao.id INNER JOIN ");
            sb.Append(" tb_nf_ambiente ON tb_nf.id_ambiente = tb_nf_ambiente.id");
 

           if (Where != string.Empty)
            {
                db.CreateParameter("@Where", SqlDbType.VarChar, Where);
                sb.Append(string.Format(" Where  {0}",Where));
            }

            if (OrderBy != string.Empty)
            {
                db.CreateParameter("@OrderBy", SqlDbType.VarChar, OrderBy);
                sb.Append(string.Format(" Order By {0}", OrderBy));
            }

            ds = db.ExecuteQuery(sb.ToString());
            return ds;
        }		
		
		public DataSet Selecionar()
        {
            DAO_DATABASE db = new DAO_DATABASE();
            DataSet ds = new DataSet();
            StringBuilder sb = new StringBuilder();

            sb.Append("Select * from  TB_NF Order By id");            
            ds = db.ExecuteQuery(sb.ToString());
            return ds;
        }		
		
		
		public DataSet ListaCampos()
        {

            DAO_DATABASE db = new DAO_DATABASE();
            DataSet ds = new DataSet();
            StringBuilder sb = new StringBuilder();
            sb.Append("SELECT TABLE_NAME, ORDINAL_POSITION, ");
            sb.Append(" COLUMN_NAME, DATA_TYPE, IS_NULLABLE ");
            sb.Append(" FROM INFORMATION_SCHEMA.COLUMNS");
            sb.Append(" WHERE TABLE_NAME = 'tb_nf'");
            ds = db.ExecuteQuery(sb.ToString());

            return ds;

        }

		public DataSet DropdownList()
        {
            DAO_DATABASE db = new DAO_DATABASE();
            DataSet ds = new DataSet();
            StringBuilder sb = new StringBuilder();
			sb.Append("SELECT ");
			sb.Append(" id ");
				sb.Append(", chave ");  				
				sb.Append(", protocolo ");  				
				sb.Append(", id_operacao ");  				
			sb.Append(" FROM tb_nf ");           
			sb.Append(" ORDER BY chave ");
            ds = db.ExecuteQuery(sb.ToString());

            // ds = db.ExecuteProcedure("USP_TB_NF_DROPDOWNLIST");  
            return ds;
        }

        public DataSet DropdownList(String Where)
        {
            DAO_DATABASE db = new DAO_DATABASE();
            DataSet ds = new DataSet();
            StringBuilder sb = new StringBuilder();
            db.CreateParameter("@Where", SqlDbType.VarChar, Where);
			sb.Append("SELECT ");
			sb.Append(" id ");
			
			
			sb.Append(", chave ");  				
			
			
			sb.Append(", protocolo ");  				
			
			
			sb.Append(", id_operacao ");  				
			sb.Append(" FROM tb_nf ");
			sb.Append(string.Format(" WHERE {0} ",Where));
			sb.Append(" ORDER BY chave ");
            ds = db.ExecuteQuery(sb.ToString());

            // ds = db.ExecuteProcedure("USP_TB_NF_DROPDOWNLIST");
            return ds;
        }
		
		  public DataSet DropdownList(String Where, String OrderBy)
        {
            DAO_DATABASE db = new DAO_DATABASE();
            DataSet ds = new DataSet();
            StringBuilder sb = new StringBuilder();
            db.CreateParameter("@Where", SqlDbType.VarChar, Where);
			sb.Append("SELECT ");
			sb.Append(" id ");
			sb.Append(", chave ");  				
			sb.Append(", protocolo ");  				
			sb.Append(", id_operacao ");  				
			sb.Append(" FROM tb_nf ");
			sb.Append(string.Format(" WHERE {0} ORDER BY {1}",Where,OrderBy));			
            ds = db.ExecuteQuery(sb.ToString());

            // ds = db.ExecuteProcedure("USP_TB_NF_DROPDOWNLIST");
            return ds;
        }

          public void Serialize(List<OBJ_TB_NF> obj, string arquivo)
          {

              try
              {
                  // C#
                  // Create file to save the data to
                  FileStream fs = new FileStream(arquivo, FileMode.Create);
                  // Create an XmlSerializer object to perform the serialization
                  XmlSerializer xs = new XmlSerializer(typeof(List<OBJ_TB_NF>));
                  // Use the XmlSerializer object to serialize the data to the file
                  xs.Serialize(fs, obj);
                  // Close the file
                  fs.Close();
              }
              catch (Exception)
              {

                  throw;
              }



          }


          public List<OBJ_TB_NF> Deserialize(string arquivo)
          {
              try
              {
                  // C#
                  // Open file to read the data from
                  FileStream fs = new FileStream(arquivo, FileMode.Open);
                  // Create an XmlSerializer object to perform the deserialization
                  XmlSerializer xs = new XmlSerializer(typeof(List<OBJ_TB_NF>));
                  // Use the XmlSerializer object to deserialize the data from the file
                  List<OBJ_TB_NF> obj = (List<OBJ_TB_NF>)xs.Deserialize(fs);
                  // Close the file
                  fs.Close();

                  return obj;

              }
              catch (Exception)
              {

                  throw;
              }

          }
	}
	#endregion
}

